package controlador;

import interfaz.TDAManejoMozos;
import interfaz.TDAManejoDatos;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.*;

import beans.*;

import negocio.ItemPP;
import negocio.Mesa;
import negocio.Mozo;
import negocio.PlanProduccion;
import negocio.admPersMozo;
import negocio.admPersistencia;
//import negocio.MozoVO;

import exceptions.*;
//import negocio.*;
import observer.Observable;


public class Negocio extends Observable
{
	private static Negocio negocio;

	private ArrayList<Mozo> mozos;
	private ArrayList<Mesa> mesas;
	private ArrayList<PlanProduccion> plan;
	private ArrayList<ItemPP> itemplan;
	
	private Negocio() {
		this.mozos = new ArrayList<Mozo>();
	}

	public static Negocio getNegocio()
	{
		if(negocio==null)
			negocio = new Negocio();
		return negocio;
	}
	
	
	public void agregarMozo(Mozo mozo) throws MozoException
	{
		Mozo a = new Mozo(mozo.getLegajo(), mozo.getNombre());
		System.out.println("El Mozo de parametro es:" + a.toString());
		//if(mozos.contains(a))
		//	throw new MozoException("El Mozo ya existe");
		//else
		//{
			mozos.add(a);
			try {
				
				admPersMozo.getAdmPersistencia().envioMozo(a);
			} catch (RemoteException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//TDAManejoMozos.this.envioMozo(a);
			//TDAManejoMozos.this.envioMozo(a);
			this.notifyObservers();
		//}
	}

	public Mozo obtenerMozoPorNumero(int legajo) throws MozoException
	{
		for(Mozo mozo: mozos)
		{
			if(mozo.getLegajo()==legajo)
				return mozo;
		}
		throw new MozoException("El Mozo no fue encontrado");
	}
	
	public ArrayList<MozoVO> getMozos() {
		Mozo aux;
		System.out.println("Negocio ArrayList getMozos");
		ArrayList<MozoVO> coleccion = new ArrayList<MozoVO>(admPersMozo.getAdmPersistencia().obtenerMozos());
		for(Iterator<Mozo> i = mozos.iterator(); i.hasNext();)
		{
			aux = i.next();
			System.out.println("Negocio - GetMozo");
			coleccion.add(new MozoVO(aux.getLegajo(), aux.getNombre()));
		}
		
		return coleccion;
	}
	
	
	public ArrayList<Mesa> obtenerMesas() throws RemoteException {
		Mesa aux;
		System.out.println("Negocio ArrayList getMesas");
		TDAManejoDatos manejoDatos = null;
		try {
			manejoDatos= (TDAManejoDatos)Naming.lookup ("//localhost/GestionDatos");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		//ArrayList<Mesa> coleccion = new ArrayList<Mesa>(admPersistencia.getAdmPersistencia().obtenerMesas());
		//ArrayList<Mesa> coleccion = new ArrayList<Mesa>(TDAManejoDatos.this.obtenerMesas());
		ArrayList<Mesa> coleccion = new ArrayList<Mesa>(manejoDatos.obtenerMesas());
		ArrayList<Mesa> mesas = new ArrayList<Mesa>(manejoDatos.obtenerMesas());
		System.out.println(coleccion.toString());
		System.out.println(coleccion.get(0).toString());
		int aa=0;
		for(Iterator<Mesa> i = mesas.iterator(); i.hasNext();)
		{
			aa= aa+1;
			System.out.println("Cant: " + aa);
				
			aux = i.next();
			System.out.println("Negocio - GetMesa");
			System.out.println("For Mesa:" + aux.toString());
			//coleccion.add(new Mesa(aux.getIdMesa(), aux.getDescripcion(),aux.getSector(),
				//	aux.getCondicion(), aux.getFecha(), aux.getCapacidad()));
			
		}
		
		return coleccion;
	}

	public Mesa obtenerMesa(int idMesa) throws RemoteException {
		
		System.out.println("obtener Mesa especifica");
		TDAManejoDatos manejoDatos = null;
		try {
			manejoDatos= (TDAManejoDatos)Naming.lookup ("//localhost/GestionDatos");
			Mesa mesa = manejoDatos.obtenerMesa(idMesa);
			return mesa;	
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		
		
	
		
	}
	
	public ArrayList<PlanProduccion> obtenerPlanesDeProduccion() throws RemoteException {
		System.out.println("Negocio ArrayList getPlanProduccion");
		TDAManejoDatos manejoDatos = null;
		try {
			
			manejoDatos= (TDAManejoDatos)Naming.lookup ("//localhost/GestionDatos");
			System.out.println("Entra a ManejoDatos");
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("Negocio obtener plan");
		ArrayList<PlanProduccion> coleccion = new ArrayList<PlanProduccion>(manejoDatos.obtenerPlanProduccion());
		System.out.println("Negocio obtener plan1");
		ArrayList<PlanProduccion> plan = new ArrayList<PlanProduccion>(manejoDatos.obtenerPlanProduccion());
		System.out.println(coleccion.toString());
		System.out.println(coleccion.get(0).toString());
		/*
		for(Iterator<PlanProduccion> i = coleccion.iterator(); i.hasNext();)
		{
			
			//System.out.println("Cant: " + coleccion.toString());
			System.out.println("Encuentra PlanProd" + coleccion.toString());
		}
		*/
		
		return coleccion;
	}

	public ArrayList<ItemPP> obtenerItemsPlanDeProduccion(int idPlanProd) throws RemoteException {
		System.out.println("Negocio ArrayList getItemPlanProduccion IDPLAN = " + idPlanProd);
		TDAManejoDatos manejoDatos = null;
		try {
			manejoDatos= (TDAManejoDatos)Naming.lookup ("//localhost/GestionDatos");
			System.out.println("Entra a ManejoDatos Item PP");
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		System.out.println("Negocio obtener ItemPP plan");
		ArrayList<ItemPP> coleccion2 = new ArrayList<ItemPP>(manejoDatos.obtenerItemsPlanProduccion(idPlanProd));
		System.out.println("Negocio obtener ItemPP plan1");
		System.out.println(coleccion2.toString());
	
	
		
		return coleccion2;
	}


}
